package com.ux.validators
{
	
	/**
	 * 에러를 발생하고 debugging해주는 클래스<br>
	 * @author LTH
	 * 
	 * @sample
	 * <listing version="3.0">
	 * 	//ValidatorDebug를 상속받은 클래스의 setter debugMode( value:String ): void를 호출하면...
	 *  ExtendsClass.debugMode = ValidatorDebug.MODE_DEBUG;
	 *  //Alert으로 에러를 잡아준다.
	 * 
	 *   ExtendsClass.debugMode = ValidatorDebug.MODE_NORMAL;
	 *  //trace로 에러를 잡아준다.
	 * 
	 *   ExtendsClass.debugMode = ValidatorDebug.MODE_NONE;
	 *  //에러를 잡지않고 무시한다.
	 */	
	public class ValidatorDebug
	{
		
		/**
		 * 에러메세지를 Alert으로 알려주는 모드<br>
		 */		
		public static const MODE_ALERT:String = "debug_alertMode";
		
		/**
		 * 에러메세지를 debugCenter의 창으로 알려주는 모드<br>
		 */		
		public static const MODE_NORMAL:String = "debug_normalMode";
		
		/**
		 * 에러메세지를 무시하는 모드<br>
		 */		
		public static const MODE_NONE:String = "debug_noneMode";
		
		private static var mode:Boolean = true;
		private static var none:Boolean = false;
		
		public function ValidatorDebug()
		{
		}
		
		
		/**
		 * EmailValidator가 ValidatorDebug클래스를 상속받지 못하므로(통신을 해야하기때문에 EventDispatcher를 상속받음)
		 * static isDebug(디버그모드 설정)를 끌어다 사용하는 매서드
		 * @param value
		 * 
		 */		
		public function set isDebugOnInstance( value: String ): void
		{
			ValidatorDebug.isDebug = value;
		}
		
		/**
		 * protected로 상속해야 사용 가능한 매서드
		 * 디버그모드 설정 
		 * @param value
		 * 
		 */		
		protected static function set isDebug( value:String ): void
		{
			if( value == ValidatorDebug.MODE_ALERT ){
				mode = true;
			} else if( value == ValidatorDebug.MODE_NORMAL ){
				mode = false;
				none = false;
			} else if( value == ValidatorDebug.MODE_NONE ){
				mode = false;
				none = true;
			}
		}
		
		/**
		 * static throwError(ValidateError를 throw하는 매서드)를 끌어다 사용하는 매서드
		 * @param type
		 * @param msg
		 * 
		 */		
		public function throwErrorOnInstance( type:String, msg:String ): void
		{
			ValidatorDebug.throwError( type, msg );
		}
		
		/**
		 * ValidateError를 throw하는 매서드
		 * @param type
		 * @param msg
		 * 
		 */		
		protected static function throwError( type:String, msg:String ): void
		{
			throw new Error( type + msg );
		}
		
		
		/**
		 * static debugging(디버그 모드에 따라 다르게 에러를 잡아주는 매서드)을 끌어다 사용하는 매서드 
		 * @param exception
		 * @param msg
		 * 
		 */		
		public function debuggingOnInstance( exception:String, msg:String ): void
		{
			ValidatorDebug.debugging( exception, msg );
		}
		
		/**
		 * 디버그 모드에 따라 다르게 에러를 잡아주는 매서드
		 * @param exception
		 * @param msg
		 * 
		 */		
		protected static function debugging( exception:String, msg:String ): void
		{
			trace(" ==> ValidatorDebug debugging : " + msg, exception );
		}
		
		
		
	}
}
